像gunicorn 及docker 有著執行時timeout的防止錯誤發生的機制,
但是要是超過了 timeout的設定,程式就不再運行的情況發生時,該怎麼辦呢?
也許可以試一下Supervisor這個套件,官網的文件:
http://supervisord.org/introduction.html
安裝:
sudo apt-get install supervisor
再來,可以看一下套件設定檔的範例:
echo_supervisord_conf
可以將範例檔存於目前的路徑:
echo_supervisord_conf > supervisord.conf
未來使用該路徑conf來運行:
sudo supervisord --configuration=/current/directory/path/supervisord.conf
如果使用預設在/etc/supervisor/supervisord.conf的檔案來運行:
sudo supervisorctl reread
sudo service supervisor restart
那我們可以修改conf來進行設定:
[program:<app名稱>]
directory=/home/username/<app名稱>
command=gunicorn app:app -b 127.0.0.1:8000 --reload
autostart=true
autorestart=true
stderr_logfile=/var/log/error.log
stdout_logfile=/var/log/output.log
可以參考的conf設定:
[unix_http_server]
file=/tmp/supervisor.sock
[supervisord]
logfile=/tmp/supervisord.log
logfile_maxbytes=50MB
logfile_backups=10
loglevel=info
pidfile=/tmp/supervisord.pid
nodaemon=false
silent=false
minfds=1024
minprocs=200
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock
[program:hello_api]
command=bash -c "source /home/wilson/miniconda3/bin/activate && gunicorn -w 4 main:app -b 0.0.0.0:5000 --reload"
directory=/home/wilson/health/health_factory_api
autostart=true ; start at supervisord start (default: true)
autorestart=true
設定完成,可以重新啟動supervisor來監控服務。
藉由supervisorctl來查看是否監控成功:
sudo supervisorctl -c xxx.conf